package com.alameda.service.impl.video;

import com.alameda.common.utils.PubUtils;
import com.alameda.facade.video.ApVideoFacade;
import com.alameda.pojo.history.ApVideoHistoryDO;
import com.alameda.service.history.ApVideoHistoryService;
import com.alameda.service.video.ApVideoService;
import com.alameda.tag.vo.AdTagVO;
import com.alameda.type.vo.AdMediaTypeVO;
import com.alameda.video.dto.ApVideoDTO;
import com.alameda.video.vo.ApVideoVO;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 移动端视频模块 业务逻辑层 具体实现
 *
 * @author Lv
 * @date 2024/09/22
 */
@Slf4j
@Service
public class ApVideoServiceImpl implements ApVideoService {

    @Autowired
    private ApVideoFacade apVideoFacade;

    /**
     * 查询视频列表
     *
     * @param apVideoDTO 移动端视频信息
     * @return
     */
    @Override
    public List<ApVideoVO> loadVideo(ApVideoDTO apVideoDTO) {
        return apVideoFacade.loadVideo(apVideoDTO);
    }

    @Autowired
    private ApVideoHistoryService apVideoHistoryService;

    /**
     * 查询视频
     *
     * @param apVideoDTO 移动端视频信息
     * @return
     */
    @Override
    public ApVideoVO findById(ApVideoDTO apVideoDTO) {
        ApVideoVO apVideoVO = apVideoFacade.findById(apVideoDTO);

        // 设定播放时刻
        dealPlayMoment(apVideoVO, apVideoDTO);
        // 设定分类
        dealVideoType(apVideoVO, apVideoDTO);
        // 设定标签
        dealVideoTag(apVideoVO, apVideoDTO);
        return apVideoVO;
    }

    /**
     * 处理标签信息
     *
     * @param apVideoVO  移动端视频数据显示对象
     * @param apVideoDTO 移动端视频信息
     */
    private void dealVideoTag(ApVideoVO apVideoVO, ApVideoDTO apVideoDTO) {
        List<AdTagVO> adTagVOList = apVideoFacade.findTagInfoByMediaId(apVideoDTO.getId());
        log.info("标签信息 :{}", JSONObject.toJSONString(adTagVOList));
        apVideoVO.setAdTagVOList(adTagVOList);
    }

    /**
     * 处理分类信息
     *
     * @param apVideoVO  移动端视频数据显示对象
     * @param apVideoDTO 移动端视频信息
     */
    private void dealVideoType(ApVideoVO apVideoVO, ApVideoDTO apVideoDTO) {
        AdMediaTypeVO adMediaTypeVO = apVideoFacade.findTypeInfoByMediaId(apVideoDTO.getId());
        log.info("分类信息 :{}", JSONObject.toJSONString(adMediaTypeVO));
        apVideoVO.setAdMediaTypeVO(adMediaTypeVO);
    }

    /**
     * 处理播放时刻
     *
     * @param apVideoVO  移动端视频数据显示对象
     * @param apVideoDTO 移动端视频信息
     */
    private void dealPlayMoment(ApVideoVO apVideoVO, ApVideoDTO apVideoDTO) {
        ApVideoHistoryDO apVideoHistoryDO = apVideoHistoryService.findByVideoId(apVideoDTO.getId());
        float playMoment = PubUtils.isNull(apVideoHistoryDO) ? Float.NaN : apVideoHistoryDO.getPlayMoment();
        apVideoVO.setPlayMoment(playMoment);
    }

    /**
     * 查询视频播放页面列表视频
     *
     * @param apVideoDTO 移动端视频信息
     * @return
     */
    @Override
    public List<ApVideoVO> findVideoDetailInfo(ApVideoDTO apVideoDTO) {
        return apVideoFacade.findVideoDetailInfo(apVideoDTO);
    }
}
